/**
    * 
    * @param preloadUrls  预加载的链接
    * @param idleTimeout  网络空闲时的超时时间
    * @description 生成用于预加载的 JavaScript 代码
    * @returns 
    */
export const createPreloadScript = (preloadUrls: string[], idleTimeout: number, autoPreload: boolean) => {
    // preloadUrls = preloadUrls.map(
    //     (src) => `<link rel="preload" as="image" href="${src}" />`
    // )
    // 生成用于预加载的 JavaScript 代码
    return `
        <script type="module">
        let urls = ${JSON.stringify(preloadUrls)};
        let autoPreload = ${autoPreload};
        let activeRequests = 0; // 当前活动的请求数量
        let idleTimeoutId; // 网络空闲时的定时器

        function checkForNetworkIdle() {
        if (activeRequests === 0 && autoPreload) {
        clearTimeout(idleTimeoutId);
        idleTimeoutId = setTimeout(() => {
            console.log('Network is idle');
            //将link标签插入到head标签中
            preloadImages(${JSON.stringify(preloadUrls)});
        },${idleTimeout});
        }
        }
        function preloadImages(imageUrls) {
        const fragment = document.createDocumentFragment();
        imageUrls.forEach(url => {
        const link = document.createElement('link');
        link.rel = 'preload';
        link.as = 'image'; // 修改 'as' 属性以匹配实际资源类型
        link.importance = 'low'; // 设置优先级
        link.href = url;
        fragment.appendChild(link);
        link.onload = () => {
            console.log('Image loaded:', url);
            link.remove();
        }
        });
        document.head.appendChild(fragment);
        }
        //创建一个 PerformanceObserver 实例，监听资源加载事件
        const observer = new PerformanceObserver((list) => {
        for (const entry of list.getEntries()) {
        console.log('Resource loaded:', entry,autoPreload);

        if (entry.entryType === 'resource' ) {
            activeRequests += entry.duration > 0 ? 1 : -1;
            checkForNetworkIdle();
        }
        }
        });
        //开始监听资源加载事件
        observer.observe({ entryTypes: ['resource'] });

        // 初始检查
        checkForNetworkIdle();

        // 清理 PerformanceObserver
        window.addEventListener('beforeunload', () => {
        observer.disconnect();
        });
        // 暴露 startPreloading 方法给页面开发者
        window.startPreload= (callback) => {

        };

        // 提供一个立即执行的预加载选项
        window.preloadNow = () => {
        preloadImages(${JSON.stringify(preloadUrls)});
        };
        </script>
    `
}
